=====================================================================
                      SimGL Release Notes
=====================================================================

q3dsimgl.txt
This document last updated for SimGL 4.5.1-PreRelease-build340, 2003-Mar-02.

Copyright (C) 1998-2003, Quantum3D, Inc.  All Rights Reserved.

=====================================================================
Quantum3D, Inc.
6330 San Ignacio Ave
San Jose, California, 95119-1205
Voice: +1 (408) 361-9999   Fax: +1 (408) 361-9980
Web Site: http://www.quantum3d.com
Technical Support: support@quantum3d.com
=====================================================================

0.  This Document
=================

This document is written from a Win32-centric point of view.
SimGL is now available for Linux also.


1.  Introduction
================

SimGL is a graphics library that provides functionality similar to a
subset of that present in the OpenGL(TM) API for certain Quantum3D
graphics systems.  SimGL stands for Simulation Graphics Library.
SimGL is NOT OpenGL(TM) nor does it implement the OpenGL(TM) API,
but it provides functionality that is very similar to a subset of the
functionality present in the OpenGL 1.1 API.

SimGL is suited for use when you have a program that makes OpenGL API
calls, but you do not have an implementation of the OpenGL API which
you wish to use or that provides the performance that you need.

2.  Getting Started
===================

SimGL may be obtained either by itself, with Quantum3D graphics systems,
or with OpenGVS.  SimGL will be installed automatically when packaged
with either OpenGVS or a Quantum3D graphics system.

The SimGL Software Development Kit distribution contains:
    q3dsimgl.txt    -- Release notes (this file).
    q3dsimgl.h      -- SimGL SDK header file.
                       Contains declarations for SimGL extensions.
    linux/x86       -- Directory containing architecture-dependent files
                       specific to Linux for x86

      Files under Linux architecture-dependent directories may include:
	libq3dsglg3.so -- SimGL shared library for Glide 3 target.

    w32/x86         -- Directory containing architecture-dependent files
                       specific to Windows 32/Intel x86.

      Files under w32 architecture-dependent directories may include:
        sglglu.bat   -- Creates files glud3* and glug3*.
        sglglut.bat  -- Creates files glutd3* and glutg3*.
        q3drnd.exe   -- Program to change references in any dll from
                        "opengl32.dll" to another name.
        q3dsgld3.dll -- SimGL dynamic link library for Direct3D
                        target.
        q3dsgld3.lib -- SimGL import library for Direct3D target.
        q3dsglg3.dll -- SimGL dynamic link library for Glide 3 target.
        q3dsglg3.lib -- SimGL import library for Glide 3 target.
        glud3.dll    -- Replaces glu32.dll for q3dsgld3.
        glud3.lib    -- Replaces glu32.lib for q3dsgld3.
        glug3.dll    -- Replaces glu32.dll for q3dsglg3.
        glug3.lib    -- Replaces glu32.lib for q3dsglg3.

To use SimGL, simply link your application against the appropriate
SimGL import library instead of opengl32.lib.  Then, make sure that
the corresponding dll can be found at runtime by placing it in your
current directory, a directory in your path, or in the system directory.
If you wish to link with glu32.lib, please see the discussion entitled
_Issues when Other DLLs expect Opengl32.dll_.  Alternatively, cause
the SimGL dll to appear with the name "opengl32.dll" in either the
same directory as your executable or in your current working directory.
Remember that the Win32 DLL loading functions search the windows systems
directories _before_ they search any directories specified by the user's
PATH environment variable.

If installed in the system directory, a typical location for the
SimGL dll would be in the directory:

    C:\windows\system        (for Windows 95/98/me)

or

    C:\winnt\system32        (for Windows NT/2000/XP)

See the appendices for lists of functions in the OpenGL API that are
present in SimGL only as stubs, or that are not implemented.

3.  Using glu32 Functions
=========================

In order to allow operation without the presence of glu32.dll,
SimGL implements the following glu functions internally and exports
the symbols to its DLL interface:

    gluBuild2DMipmaps
    gluScaleImage
    gluErrorString

If those are the only functions in which you are interested then you
need not link with glu32.lib.  However, if you do wish to use other
glu32 functions, then you may still wish to link with glu32.lib
(after appropriate precautions are taken) -- see the discussion below
entitled _Issues when Other DLLs expect Opengl32.dll_.

If you do link with glu32.lib, then the functions listed above will
be present in both the glu32 and the SimGL DLLs.  For those functions
that are present in multiple DLLs, the functions present in the
import library that is specified first to the linker will be used.
(The exception is that any internal calls to these functions from
SimGL (e.g., gluScaleImage) will use the functions actually linked
into SimGL -- this should be OK.)  This implies that glu32.lib should
appear in the link command before the SimGL import library.

4.  Issues when Other DLLs expect OpenGL32.dll
==============================================

Certain existing DLLs such as glu32.dll expect to find a dll named
opengl32.dll -- not the SimGL dll under its usual name.  (Glu32.dll
contains the GL utility (glu) functions, and is commonly used.)  This
means that even if you link with the SimGL import library and
glu32.lib, at execution time, glu32.dll will look for opengl32.dll
instead of the SimGL dll.  Things will go downhill from there.
If you wish to use glu32.dll with SimGL there are several approaches
that you can use.  Here are several:

(1) Use alternate versions of glu32.lib and glu32.dll.
    These are distributed with SimGL:
        glud3.dll        -- Replaces glu32.dll for q3dsgld3
        glud3.lib        -- Replaces glu32.lib for q3dsgld3
        glug3.dll        -- Replaces glu32.dll for q3dsglg3
        glug3.lib        -- Replaces glu32.lib for q3dsglg3

(2) Use alternate versions of glu32.lib and glu32.dll that
    you create yourself from an existing glu32.lib and glu32.dll.
    File sglglu.bat (from directory simgl/w32) may be used for this
    purpose.  Invoke sglglu.bat as follows:

        sglglu.bat dir_containing_glu32.lib dir_for_output

    where both of the parameters default to "." if not specified and
    not available from the environment.

    WARNING: Unfortunately, sglglu.bat does not understand spaces
    inside file names.  Therefore, you may need to work around this
    problem if spaces are present.

    For example, the following commands will often suffice to work
    around the problem of spaces in directory names:

        cd simgl\w32\x86

	mkdir atmpdir

        copy "c:\Program Files\devStudio\vc\lib\glu32.lib" atmpdir

        ..\sglglu.bat atmpdir

	 del atmpdir\glu32.lib

    Summary of actions performed by sglglu.bat:

    Files glu32.dll and glu32.lib are copied into other names that
    have the same number of characters (i.e., glud3.lib, glud3.dll,
    glug3.lib, and glug3.dll).  Then, supplied program q3drnd is used
    to modify these files so that all references to glu32 and opengl32
    are changed to the appropriate names.

    Example of sglblu.bat action:
        copy %windir%\system32\glu32.dll glud3.dll
        copy "\Program Files\DevStudio\VC\lib\glu32.lib" glud3.lib
            (or, for MSVC versions before V5)
        copy C:\msdev\lib\glu32.lib" glud3.lib
        q3drnd.exe -name_old glu32 -name_new glud3 glud3.lib
        q3drnd.exe -name_old glu32 -name_new glud3 glud3.dll
        q3drnd.exe -name_old opengl32 -name_new q3dsgld3 glud3.lib
        q3drnd.exe -name_old opengl32 -name_new q3dsgld3 glud3.dll

    Then, glud3.lib or glug3.lib is included in your link
    and glud3.dll or glug3.dll is accessed as a DLL at
    runtime.

(3) Don't link with the SimGL import library.  Instead, link with
    Opengl32.lib and ensure that SimGL (e.g., q3dsglg3.dll or
    q3dsgld3.dll) will be found in the DLL search under the name
    "opengl32.dll" before the standard opengl32.dll is found.

5.  Items of Interest
=====================

(1) For early 3DFX boards (Voodoo and Voodoo 2), SimGL displays on a
    separate video output.  The application's graphics (GDI) window will
    appear on the regular display as usual, but will stay blank.

    The SimGL graphics output will appear on the secondary display
    and will be positioned in the lower left corner of the display.
    The SimGL viewport will be the same size as the original GDI
    window (measured in pixels).  However, it will usually be larger
    or smaller than the original unless the two display resolutions
    are made to be the same.
    Modify the above discussion as required for pass-through mode usage.

(2) SimGL has been optimized for rendering from display lists.
    Immediate mode rendering may be less efficient.

6.  Frequently Asked Questions
==============================

Q1  I only have an executable file, so I can't relink against the
    SimGL import library and my program will look for opengl32.dll at
    runtime.  I don't want to rename SimGL's DLL to be called
    OpenGL32.dll.  How can I use SimGL?

A1  You could use the q3drnd program (supplied in the SimGL standard
    distribution) to modify your existing executable file to look for
    SimGL instead of OpenGL32's DLL.  The following commands would
    modify your executable file appropriately, including fixing
    references to other system DLL's associated with OpenGL32.dll.

        q3drnd.exe -name_old opengl32 -name_new q3dsgld3 myprog.exe
        q3drnd.exe -name_old glu32    -name_new glug3    myprog.exe
        q3drnd.exe -name_old glut32   -name_new glutg3   myprog.exe

Q2  I don't want to patch my executable file.  Can't I just copy the
    SimGL dll into the place where opengl32.dll normally resides?
    For example:
        copy q3dsglg3.dll c:\windows\system\opengl32.dll
    or
        copy q3dsglg3.dll c:\winnt\system32\opengl32.dll

A2  There are two problems with attempting to replace OpenGL32.dll
    in the system directory.
    
    First, for Windows 2000, Windows XP, and (presumably) any later
    releases in the series, the operating system uses something called
    Windows File Protection (or WFP) to prevent the modification of system
    DLL's (including OpenGL32.dll).  If the system detects a system DLL
    without a Microsoft signature, it will attempt to replace it from
    the dllcache directory, from any version of the DLL still in use in
    the system, or from the installation media.  It's probably difficult
    to defeat WFP.

    Secondly, for operating systems without Windows File Protection,
    if you copied the SimGL dll into the file opengl32.dll in the
    system directory where opengl32.dll normally resides, then an
    application that was looking for opengl32.dll would find the
    SimGL version of the file instead and would attempt to execute
    with SimGL in place of opengl32.dll.
    This could potentially cause problems with other applications on
    the system that may depend on features of opengl32.dll that are
    not present in the SimGL dll.  Therefore, this procedure is not
    recommended.

Q3  Are there any parts of the standard Windows 9x, NT,
    2000, or XP system software that use the OpenGL API?

A3  We are not aware of any parts of the standard Windows 9x,
    NT, 2000, or XP system software that use the OpenGL API,
    except some screen savers.

Q4  What if my executable program looks for opengl32.dll and I copy
    the SimGL dll into my current working directory as opengl32.dll?

A4  This approach ought to work.  When your application ran it would
    look for opengl32.dll.  It would find it from your directory instead
    of the system directory, and would run with that one.

Q5  Can I use the glu utility functions found in glu32.dll?

A5  You can use some of the glu functions.  However, certain GLU
    functions are not expected to work, as they are believed to call
    functions that SimGL does not support (such as glMap* and
    glEval*).

    For more information, see paragraphs:
        3 --  _Using glu32 Functions__
        4 --  _Issues when Other DLLs expect Opengl32.dll_


Appendix A.  Functionality not present in SimGL
===============================================

The following is some of the functionality in the OpenGL API that is not
implemented or only partially implemented by SimGL.  For more information,
see the other appendices.

--  glMaterialfv and glColorMaterial "face" parameter is not used.
    For purposes of material properties, SimGL does not differentiate
    between front and back faces.  If GL_BACK is specified as the "face"
    parameter to these functions, it is treated as an invalid enumeration.

--  glLightModelfv GL_LIGHT_MODEL_TWO_SIDE is not supported.

--  Color index mode is not supported.

--  Function glReadPixels only reads pixels.  It does not scale,
    bias, map, or otherwise convolute the pixels.

--  Stencil planes are available for the Glide target for boards
    based on the 3DFX VSA-100 chip when it is in 32-bit color mode
    _and_ the user has defined environment variable "SGL_ENV_STENCIL"
    as 1.  Stencil planes are not enabled by default because screen
    clears which include the stencil planes are substantially slower.

--  SimGL only partially supports the OpenGL multitexture model due
    to incompatibilities between the OpenGL multitexture specification
    and 3DFX hardware.  SimGL multitexture should work compatibly with
    the OpenGL model provided the texture environment modes in use are
    mutually commutative operations, such as all GL_MODULATE.  However,
    it will not work properly for non-commutative modes such as GL_BLEND.

    The problem is that the OpenGL standard starts with the iterated RGB
    color and modifies it using the texture stages, whereas GLIDE starts
    with the highest numbered texture stage and modifies the color using
    lower texture stages and finally with the iterated RGB color.


Appendix B.  Functions defined by SimGL
=======================================

The OpenGL API has approximately 334 functions (excluding functions that
are specific to a windowing system such as wgl* and glX*).  There are 307
functions in this list including the 7 redundant EXT* function names of
glTexSubImage2DEXT and the texture object extension but excluding the
window-system interface functions which are listed separately below.

See the other appendices for any limitations on SimGL
functions.  SimGL defines the following functions:

    glAlphaFunc
    glAreTexturesResident
    glAreTexturesResidentEXT
    glArrayElement
    glBegin
    glBindTexture
    glBindTextureEXT
    glBitmap
    glBlendFunc
    glCallList
    glCallLists
    glClear
    glClearColor
    glClearDepth
    glClearStencil
    glColor3b
    glColor3bv
    glColor3d
    glColor3dv
    glColor3f
    glColor3fv
    glColor3i
    glColor3iv
    glColor3s
    glColor3sv
    glColor3ub
    glColor3ubv
    glColor3ui
    glColor3uiv
    glColor3us
    glColor3usv
    glColor4b
    glColor4bv
    glColor4d
    glColor4dv
    glColor4f
    glColor4fv
    glColor4i
    glColor4iv
    glColor4s
    glColor4sv
    glColor4ub
    glColor4ubv
    glColor4ui
    glColor4uiv
    glColor4us
    glColor4usv
    glColorMask
    glColorMaterial
    glColorPointer
    glCompressedTexImage2DARB
    glCompressedTexSubImage2DARB
    glCopyPixels
    glCullFace
    glDeleteLists
    glDeleteTextures
    glDeleteTexturesEXT
    glDepthFunc
    glDepthMask
    glDepthRange
    glDetailTexFuncSGIS
    glDisable
    glDisableClientState
    glDrawArrays
    glDrawBuffer
    glDrawElements
    glDrawPixels
    glDrawRangeElements
    glEdgeFlagPointer
    glEnable
    glEnableClientState
    glEnd
    glEndList
    glFinish
    glFlush
    glFogf
    glFogfv
    glFogi
    glFogiv
    glFrontFace
    glFrustum
    glGenLists
    glGenTextures
    glGenTexturesEXT
    glGetBooleanv
    glGetCompressedTexImageARB
    glGetDetailTexFuncSGIS
    glGetDoublev
    glGetError
    glGetFloatv
    glGetIntegerv
    glGetMaterialfv
    glGetMaterialiv
    glGetPointerv
    glGetSharpenTexFuncSGIS
    glGetString
    glGetTexEnvfv
    glGetTexEnviv
    glGetTexFilterFuncSGIS
    glGetTexGendv
    glGetTexGenfv
    glGetTexGeniv
    glGetTexLevelParameterfv
    glGetTexLevelParameteriv
    glGetTexParameterfv
    glGetTexParameteriv
    glHint
    glIndexPointer
    glInterleavedArrays
    glIsEnabled
    glIsList
    glIsTexture
    glIsTextureEXT
    glLightModelf
    glLightModelfv
    glLightModeli
    glLightModeliv
    glLightf
    glLightfv
    glLighti
    glLightiv
    glLineStipple
    glListBase
    glLoadIdentity
    glLoadMatrixd
    glLoadMatrixf
    glMaterialf
    glMaterialfv
    glMateriali
    glMaterialiv
    glMatrixMode
    glMultMatrixd
    glMultMatrixf
    glMultiTexCoord1dSGIS
    glMultiTexCoord1dvSGIS
    glMultiTexCoord1fSGIS
    glMultiTexCoord1fvSGIS
    glMultiTexCoord1iSGIS
    glMultiTexCoord1ivSGIS
    glMultiTexCoord1sSGIS
    glMultiTexCoord1svSGIS
    glMultiTexCoord2dSGIS
    glMultiTexCoord2dvSGIS
    glMultiTexCoord2fSGIS
    glMultiTexCoord2fvSGIS
    glMultiTexCoord2iSGIS
    glMultiTexCoord2ivSGIS
    glMultiTexCoord2sSGIS
    glMultiTexCoord2svSGIS
    glMultiTexCoord3dSGIS
    glMultiTexCoord3dvSGIS
    glMultiTexCoord3fSGIS
    glMultiTexCoord3fvSGIS
    glMultiTexCoord3iSGIS
    glMultiTexCoord3ivSGIS
    glMultiTexCoord3sSGIS
    glMultiTexCoord3svSGIS
    glMultiTexCoord4dSGIS
    glMultiTexCoord4dvSGIS
    glMultiTexCoord4fSGIS
    glMultiTexCoord4fvSGIS
    glMultiTexCoord4iSGIS
    glMultiTexCoord4ivSGIS
    glMultiTexCoord4sSGIS
    glMultiTexCoord4svSGIS
    glNewList
    glNormal3b
    glNormal3bv
    glNormal3d
    glNormal3dv
    glNormal3f
    glNormal3fv
    glNormal3i
    glNormal3iv
    glNormal3s
    glNormal3sv
    glNormalPointer
    glOrtho
    glPixelStoref
    glPixelStorei
    glPixelZoom
    glPointSize
    glPolygonMode
    glPolygonOffset
    glPopAttrib
    glPopMatrix
    glPrioritizeTextures
    glPrioritizeTexturesEXT
    glPushAttrib
    glPushMatrix
    glRasterPos2d
    glRasterPos2dv
    glRasterPos2f
    glRasterPos2fv
    glRasterPos2i
    glRasterPos2iv
    glRasterPos2s
    glRasterPos2sv
    glRasterPos3d
    glRasterPos3dv
    glRasterPos3f
    glRasterPos3fv
    glRasterPos3i
    glRasterPos3iv
    glRasterPos3s
    glRasterPos3sv
    glRasterPos4d
    glRasterPos4dv
    glRasterPos4f
    glRasterPos4fv
    glRasterPos4i
    glRasterPos4iv
    glRasterPos4s
    glRasterPos4sv
    glReadBuffer
    glReadPixels
    glRectd
    glRectdv
    glRectf
    glRectfv
    glRecti
    glRectiv
    glRects
    glRectsv
    glRenderMode
    glRotated
    glRotatef
    glScaled
    glScalef
    glScissor
    glSelectTextureCoordSetSGIS
    glSelectTextureSGIS
    glSelectTextureTransformSGIS
    glShadeModel
    glSharpenTexFuncSGIS
    glStencilFunc
    glStencilMask
    glStencilOp
    glTexCoord1d
    glTexCoord1dv
    glTexCoord1f
    glTexCoord1fv
    glTexCoord1i
    glTexCoord1iv
    glTexCoord1s
    glTexCoord1sv
    glTexCoord2d
    glTexCoord2dv
    glTexCoord2f
    glTexCoord2fv
    glTexCoord2i
    glTexCoord2iv
    glTexCoord2s
    glTexCoord2sv
    glTexCoord3d
    glTexCoord3dv
    glTexCoord3f
    glTexCoord3fv
    glTexCoord3i
    glTexCoord3iv
    glTexCoord3s
    glTexCoord3sv
    glTexCoord4d
    glTexCoord4dv
    glTexCoord4f
    glTexCoord4fv
    glTexCoord4i
    glTexCoord4iv
    glTexCoord4s
    glTexCoord4sv
    glTexCoordPointer
    glTexEnvf
    glTexEnvfv
    glTexEnvi
    glTexEnviv
    glTexFilterFuncSGIS
    glTexGend
    glTexGendv
    glTexGenf
    glTexGenfv
    glTexGeni
    glTexGeniv
    glTexImage2D
    glTexParameterf
    glTexParameterfv
    glTexParameteri
    glTexParameteriv
    glTexSubImage2D
    glTexSubImage2DEXT
    glTranslated
    glTranslatef
    glVertex2d
    glVertex2dv
    glVertex2f
    glVertex2fv
    glVertex2i
    glVertex2iv
    glVertex2s
    glVertex2sv
    glVertex3d
    glVertex3dv
    glVertex3f
    glVertex3fv
    glVertex3i
    glVertex3iv
    glVertex3s
    glVertex3sv
    glVertex4d
    glVertex4dv
    glVertex4f
    glVertex4fv
    glVertex4i
    glVertex4iv
    glVertex4s
    glVertex4sv
    glVertexPointer
    glViewport

SimGL for Win32 implements the needed functionality of the following
Win32 to OpenGL API interface functions:

    wglChoosePixelFormat
    wglCopyContext
    wglCreateContext
    wglCreateLayerContext
    wglDeleteContext
    wglDescribeLayerPlane
    wglDescribePixelFormat
    wglGetCurrentContext
    wglGetCurrentDC
    wglGetDefaultProcAddress
    wglGetLayerPaletteEntries
    wglGetPixelFormat
    wglGetProcAddress
    wglMakeCurrent
    wglRealizeLayerPalette
    wglSetLayerPaletteEntries
    wglSetPixelFormat
    wglShareLists
    wglSwapBuffers
    wglSwapLayerBuffers
    wglUseFontBitmapsA
    wglUseFontBitmapsW

    SimGL also defines the following functions which simply make direct
    calls to the underlying versions of the functions of the same name
    with "wgl" prepended.  User applications should use the following
    (GDI) names and avoid direct calls to the "wgl" versions of the
    same.  In the normal case, a user reference to these functions will
    probably be resolved by system file gdi32.dll which will in turn
    call the SimGL wgl versions of these functions.

    ChoosePixelFormat
    DescribePixelFormat
    GetPixelFormat
    SetPixelFormat
    SwapBuffers

SimGL for X11 implements the needed functionality of the following
X11 to OpenGL API interface functions:

    glXChooseVisual
    glXCreateContext
    glXDestroyContext
    glXGetClientString
    glXGetConfig
    glXGetCurrentContext
    glXGetCurrentDrawable
    glXIsDirect
    glXMakeCurrent
    glXQueryExtension
    glXQueryExtensionsString
    glXQueryServerString
    glXQueryVersion
    glXSwapBuffers
    glXUseXFont
    glXWaitGL
    glXWaitX

Of the above glX functions, the following notes apply:

    glXSwapBuffers		(swaps current context as opposed
				to specified drawable)
    glXUseXFont			(Not yet implemented, presently a stub)


Appendix C.  Functions present as stubs that execute as no-ops
==============================================================

The following functions are present as stubs and have no
functionality.  When these functions are called no error
message is issued and the GL error status is not modified.

    glClearIndex
    glLineWidth

Appendix D.  Functions present as stubs that execute with warnings
==================================================================

The following functions are present as stubs and have no
functionality.  When these functions are called the GL error status
is set to GL_INVALID_OPERATION.  The first time that any particular
one of these functions is called, a warning message is sent to
stderr.

    glAccum
    glClearAccum
    glClipPlane
    glCopyTexImage1D
    glCopyTexImage2D
    glCopyTexSubImage1D
    glCopyTexSubImage2D
    glDebugEntry
    glEdgeFlag
    glEdgeFlagPointer
    glEdgeFlagv
    glEvalCoord1d
    glEvalCoord1dv
    glEvalCoord1fv
    glEvalCoord2d
    glEvalCoord2dv
    glEvalCoord2fv
    glEvalPoint1
    glFeedbackBuffer
    glGetClipPlane
    glGetLightfv
    glGetLightiv
    glGetMapdv
    glGetMapfv
    glGetMapiv
    glGetPixelMapfv
    glGetPixelMapuiv
    glGetPixelMapusv
    glGetPolygonStipple
    glGetTexImage
    glIndexMask
    glIndexPointer
    glIndexd
    glIndexdv
    glIndexf
    glIndexfv
    glIndexi
    glIndexiv
    glIndexs
    glIndexsv
    glIndexub
    glIndexubv
    glInitNames
    glLineStipple
    glLoadName
    glLogicOp
    glMap1d
    glMap2d
    glMapGrid1d
    glMapGrid2f
    glPassThrough
    glPixelMapfv
    glPixelMapuiv
    glPixelMapusv
    glPixelTransferf
    glPixelTransferi
    glPolygonOffsetEXT
    glPolygonStipple
    glPopClientAttrib
    glPopName
    glPushClientAttrib
    glPushName
    glSelectBuffer
    glTexImage1D
    glTexSubImage1D
    glTexSubImage1DEXT

For the Win32 target:

    wglCopyContext
    wglDescribeLayerPlane
    wglGetDefaultProcAddress
    wglGetLayerPaletteEntries
    wglRealizeLayerPalette
    wglSetLayerPaletteEntries
    wglShareLists
    wglUseFontBitmapsW
    wglUseFontOutlinesA
    wglUseFontOutlinesW

Appendix E.  glEnable/glDisable Implementation
==============================================

The following enumerations are present for glEnable and glDisable.

    GL_ALPHA_TEST
    GL_BLEND
    GL_COLOR_CACHING_Q3DSGL
    GL_COLOR_MATERIAL
    GL_CULL_FACE
    GL_DEPTH_TEST
    GL_DITHER
    GL_FOG
    GL_LIGHT0
    GL_LIGHT1
    GL_LIGHT2
    GL_LIGHT3
    GL_LIGHT4
    GL_LIGHT5
    GL_LIGHT6
    GL_LIGHT7
    GL_LIGHTING
    GL_LINE_SMOOTH
    GL_LINE_STIPPLE
    GL_NORMALIZE
    GL_POINT_SMOOTH
    GL_POINT_TEXTURE_Q3DSGL
    GL_POLYGON_OFFSET_FILL
    GL_POLYGON_OFFSET_LINE
    GL_POLYGON_OFFSET_POINT
    GL_POLYGON_SMOOTH
    GL_SAMPLE_ALPHA_TO_COVERAGE_Q3DSGL
    GL_SCISSOR_TEST
    GL_STENCIL_TEST
    GL_TEXTURE_1D
    GL_TEXTURE_2D
    GL_TEXTURE_GEN_Q
    GL_TEXTURE_GEN_R
    GL_TEXTURE_GEN_S
    GL_TEXTURE_GEN_T

Appendix F.  glGet Implementation
=================================

The following enumerations are present for glGetIntegerv,
glGetFloatv, glGetDoublev, and glGetBooleanv.

    GL_ACCUM_ALPHA_BITS
    GL_ACCUM_BLUE_BITS
    GL_ACCUM_GREEN_BITS
    GL_ACCUM_RED_BITS
    GL_ACTIVE_TEXTURE_ARB
    GL_ALPHA_BITS
    GL_ALPHA_TEST
    GL_ALPHA_TEST_FUNC
    GL_ALPHA_TEST_REF
    GL_ASPECT_RATIO_LOG2_MAX_Q3DSGL
    GL_ASPECT_RATIO_LOG2_MIN_Q3DSGL
    GL_ATTRIB_STACK_DEPTH
    GL_AUX_BUFFERS
    GL_BLEND
    GL_BLEND_DST
    GL_BLEND_SRC
    GL_BLUE_BITS
    GL_CLIENT_ACTIVE_TEXTURE_ARB
    GL_CLIP_VOLUME_CLIPPING_HINT_EXT
    GL_COLOR_ARRAY_SIZE
    GL_COLOR_ARRAY_STRIDE
    GL_COLOR_ARRAY_TYPE
    GL_COLOR_CACHING_Q3DSGL
    GL_COLOR_CLEAR_VALUE
    GL_COLOR_MATERIAL
    GL_COLOR_WRITEMASK
    GL_COMPRESSED_TEXTURE_FORMATS_ARB
    GL_CULL_FACE
    GL_CULL_FACE_MODE
    GL_CURRENT_COLOR
    GL_CURRENT_NORMAL
    GL_CURRENT_RASTER_COLOR
    GL_CURRENT_RASTER_DISTANCE
    GL_CURRENT_RASTER_POSITION
    GL_CURRENT_RASTER_POSITION_VALID
    GL_CURRENT_RASTER_TEXTURE_COORDS
    GL_CURRENT_TEXTURE_COORDS
    GL_DEPTH_BITS
    GL_DEPTH_CLEAR_VALUE
    GL_DEPTH_FUNC
    GL_DEPTH_RANGE
    GL_DEPTH_TEST
    GL_DEPTH_WRITEMASK
    GL_DETAIL_TEXTURE_2D_BINDING_SGIS
    GL_DITHER
    GL_DOUBLEBUFFER            -- (A real value only for Glide target)
    GL_DRAW_BUFFER
    GL_EDGE_FLAG_ARRAY_STRIDE
    GL_FOG
    GL_FOG_COLOR
    GL_FOG_DENSITY
    GL_FOG_END
    GL_FOG_HINT
    GL_FOG_MODE
    GL_FOG_START
    GL_FRONT_FACE
    GL_GREEN_BITS
    GL_INDEX_ARRAY_STRIDE
    GL_INDEX_ARRAY_TYPE
    GL_LIGHT0
    GL_LIGHT1
    GL_LIGHT2
    GL_LIGHT3
    GL_LIGHT4
    GL_LIGHT5
    GL_LIGHT6
    GL_LIGHT7
    GL_LIGHTING
    GL_LINE_SMOOTH
    GL_LINE_SMOOTH_HINT
    GL_LINE_STIPPLE_PATTERN
    GL_LINE_STIPPLE_REPEAT
    GL_LINE_WIDTH
    GL_LINE_WIDTH_GRANULARITY
    GL_LINE_WIDTH_RANGE
    GL_LIST_BASE
    GL_MATRIX_MODE
    GL_MAX_ATTRIB_STACK_DEPTH
    GL_MAX_LIGHTS
    GL_MAX_LIST_NESTING
    GL_MAX_MODELVIEW_STACK_DEPTH
    GL_MAX_PROJECTION_STACK_DEPTH
    GL_MAX_TEXTURE_COORD_SETS_SGIS
    GL_MAX_TEXTURE_SIZE
    GL_MAX_TEXTURES_SGIS
    GL_MAX_TEXTURE_STACK_DEPTH
    GL_MAX_TEXTURE_UNITS_ARB
    GL_MAX_VIEWPORT_DIMS        -- (A real value only for Glide target)
    GL_MODELVIEW_MATRIX
    GL_MODELVIEW_STACK_DEPTH
    GL_NORMAL_ARRAY_STRIDE
    GL_NORMAL_ARRAY_TYPE
    GL_NORMALIZE
    GL_NUM_COMPRESSED_TEXTURE_FORMATS_ARB
    GL_PACK_ALIGNMENT
    GL_PACK_LSB_FIRST
    GL_PACK_ROW_LENGTH
    GL_PACK_SKIP_PIXELS
    GL_PACK_SKIP_ROWS
    GL_PACK_SWAP_BYTES
    GL_PERSPECTIVE_CORRECTION_HINT
    GL_POINT_SIZE
    GL_POINT_SIZE_GRANULARITY
    GL_POINT_SIZE_RANGE
    GL_POINT_SMOOTH
    GL_POINT_SMOOTH_HINT
    GL_POINT_TEXTURE_NAME_Q3DSGL
    GL_POINT_TEXTURE_Q3DSGL
    GL_POLYGON_MODE
    GL_POLYGON_OFFSET_FACTOR
    GL_POLYGON_OFFSET_FILL
    GL_POLYGON_OFFSET_LINE
    GL_POLYGON_OFFSET_POINT
    GL_POLYGON_OFFSET_UNITS
    GL_POLYGON_SMOOTH
    GL_POLYGON_SMOOTH_HINT
    GL_PROJECTION_MATRIX
    GL_PROJECTION_STACK_DEPTH
    GL_READ_PIXELS_AA_HINT_Q3DSGL
    GL_RED_BITS
    GL_RENDER_MODE
    GL_SAMPLE_ALPHA_TO_COVERAGE_Q3DSGL
    GL_SAMPLES_3DFX
    GL_SAMPLES_ARB
    GL_SAMPLES_SGIS
    GL_SCISSOR_BOX
    GL_SCISSOR_TEST
    GL_SELECTED_TEXTURE_COORD_SET_SGIS
    GL_SELECTED_TEXTURE_SGIS
    GL_SELECTED_TEXTURE_TRANSFORM_SGIS
    GL_SHADE_MODEL
    GL_STATS_PIXELS_DRAWN_H_Q3DSGL
    GL_STATS_PIXELS_DRAWN_L_Q3DSGL
    GL_STATS_PIXELS_TOTAL_H_Q3DSGL
    GL_STATS_PIXELS_TOTAL_L_Q3DSGL
    GL_STATS_TEXTURE_BYTES_H_Q3DSGL
    GL_STATS_TEXTURE_BYTES_L_Q3DSGL
    GL_STATS_TEXTURE_LOAD_Q3DSGL
    GL_STENCIL_BITS
    GL_STENCIL_CLEAR_VALUE
    GL_STENCIL_FAIL
    GL_STENCIL_FUNC
    GL_STENCIL_PASS_DEPTH_FAIL
    GL_STENCIL_PASS_DEPTH_PASS
    GL_STENCIL_REF
    GL_STENCIL_TEST
    GL_STENCIL_VALUE_MASK
    GL_STENCIL_WRITEMASK
    GL_STEREO
    GL_SUBPIXEL_BITS
    GL_TEXTURE_2D
    GL_TEXTURE_2D_BINDING_EXT
    GL_TEXTURE_BINDING_2D
    GL_TEXTURE_COMPRESSION_HINT_ARB
    GL_TEXTURE_COORD_ARRAY_SIZE
    GL_TEXTURE_COORD_ARRAY_STRIDE
    GL_TEXTURE_COORD_ARRAY_TYPE
    GL_TEXTURE_COORD_REDUCE_IMM_HINT_Q3DSGL
    GL_TEXTURE_MATRIX
    GL_TEXTURE_STACK_DEPTH
    GL_TIMEOUT_PERIOD_Q3DSGL
    GL_UNPACK_ALIGNMENT
    GL_UNPACK_LSB_FIRST
    GL_UNPACK_ROW_LENGTH
    GL_UNPACK_SKIP_PIXELS
    GL_UNPACK_SKIP_ROWS
    GL_UNPACK_SWAP_BYTES
    GL_VERTEX_ARRAY_SIZE
    GL_VERTEX_ARRAY_STRIDE
    GL_VERTEX_ARRAY_TYPE
    GL_VIEWPORT


Appendix G.  Environment Variables interpreted by SimGL
=======================================================

SimGL environment variables begin with "SGL_ENV_".  These environment
variables are read by SimGL when it initializes and therefore must be
defined before SimGL is called.

When SimGL is executing in a Windows environment it looks for
environment variables first in the regular environment, and then
(if not found), in the system registry under HKEY_LOCAL_MACHINE under
"SOFTWARE\Quantum3D\SimGL".

See file q3dsimgl.h for the declaration of SimGL extension
"GL_Q3DSGL_setenv".  This extension defines function sglSetEnvQ3DSGL
which may be used by an application to set SimGL environment variables
from within the program prior to SimGL initialization.


Useful SimGL environment variables:

SGL_ENV_GLIDE_RESOLUTION_DEFAULT  --  Default resolution if not specified
    through API

SGL_ENV_GLIDE_SWAP_INTERVAL       --  Glide grBufferSwap swap interval
    parameter

SGL_ENV_POLYGON_OFFSET_R_BPP_16   --  value to override default
    glPolygonOffset 'r' value of 140 for 16-bit depth buffer

SGL_ENV_POLYGON_OFFSET_R_BPP_24   --  value to override default
    glPolygonOffset 'r' value of 2100 for 24-bit depth buffer

SGL_ENV_STENCIL                   --  1 to allow use of stencil planes

SGL_ENV_SWAP_FINISH               --  Define as 0 to suppress Glide 3
    grFinish after grBufferSwap

SGL_ENV_TEXTURE_32_BIT            --  "1" to avoid forced conversion of
    32-bit textures to 16-bit

SGL_ENV_TEXTURE_DETAIL_STATE      --  Define as "0" to suppress detail
    texture.

SGL_ENV_TEXTURE_LOD_BIAS***       --  If set to a floating point value,
    use that value for all lod biases, overriding any others

SGL_ENV_TEXTURE_LOD_BIAS_OFFSET***--  If set to a floating point value,
    bias_offset is added to the texture lod bias that would otherwise
    have been used.  (Was SGL_ENV_GLIDE_TXR_LOD_BIAS_OFFSET)

SGL_ENV_TEXTURE_LOD_BLEND***      --  Defaults to 1.  Set to 0 to suppress
    lod blending (aka trilinear)

SGL_ENV_TEXTURE_SIZE_MAX          --  If defined, limit maximum texture
    size to no more than this

SGL_ENV_TEXTURE_STATE             --  Define as "0" to suppress all
    texture.


Useful Glide environment variables:

FX_GLIDE_BPP                      --  16 or 32 -- selects color mode.
